/**
 * 数据源管理 API
 */

import { request } from '@/service/request';

/** 数据源类型 */
export enum DataSourceType {
  MYSQL = 'MYSQL',
  ORACLE = 'ORACLE',
  POSTGRESQL = 'POSTGRESQL',
  SQLSERVER = 'SQLSERVER',
  DAMENG = 'DAMENG',
  KINGBASE = 'KINGBASE',
  DORIS = 'DORIS',
  KAFKA = 'KAFKA',
  RABBITMQ = 'RABBITMQ'
}

/** 数据源状态 */
export enum DataSourceStatus {
  DISABLED = 0,
  ENABLED = 1
}

/** 数据源实体 */
export interface DataSource {
  /** ID */
  id?: number;
  /** 租户ID */
  tenantId?: number;
  /** 数据源名称 */
  name: string;
  /** 数据源类型 */
  type: DataSourceType;
  /** 主机地址 */
  host?: string;
  /** 端口 */
  port?: number;
  /** 数据库名 */
  databaseName?: string;
  /** 用户名 */
  username?: string;
  /** 密码 */
  password?: string;
  /** 扩展属性 */
  properties?: string;
  /** 状态 */
  status?: DataSourceStatus;
  /** 项目ID */
  projectId?: number;
  /** 创建时间 */
  createTime?: string;
  /** 更新时间 */
  updateTime?: string;
}

/** 数据源查询参数 */
export interface DataSourceQuery {
  /** 页码 */
  pageNum?: number;
  /** 每页数量 */
  pageSize?: number;
  /** 数据源名称 */
  name?: string;
  /** 数据源类型 */
  type?: DataSourceType;
  /** 状态 */
  status?: DataSourceStatus;
  /** 项目ID */
  projectId?: number;
}

/** 数据源连接测试参数 */
export interface DataSourceTestParams {
  /** 数据源类型 */
  type: DataSourceType;
  /** 主机地址 */
  host: string;
  /** 端口 */
  port: number;
  /** 数据库名 */
  databaseName?: string;
  /** 用户名 */
  username: string;
  /** 密码 */
  password: string;
  /** 扩展属性 */
  properties?: string;
}

/**
 * 查询数据源列表
 */
export function getDataSourceList(params: DataSourceQuery) {
  return request<Api.Common.PaginatingQueryRecord<DataSource>>({
    url: '/dataplatform/datasource/list',
    method: 'get',
    params
  });
}

/**
 * 查询数据源列表 (别名，兼容旧代码)
 */
export function fetchDataSourceList(params: DataSourceQuery) {
  return getDataSourceList(params);
}

/**
 * 查询数据源详情
 */
export function getDataSource(id: number) {
  return request<DataSource>({
    url: `/dataplatform/datasource/${id}`,
    method: 'get'
  });
}

/**
 * 新增数据源
 */
export function addDataSource(data: DataSource) {
  return request<void>({
    url: '/dataplatform/datasource',
    method: 'post',
    data
  });
}

/**
 * 修改数据源
 */
export function updateDataSource(data: DataSource) {
  return request<void>({
    url: '/dataplatform/datasource',
    method: 'put',
    data
  });
}

/**
 * 删除数据源
 */
export function deleteDataSource(ids: number | number[]) {
  return request<void>({
    url: `/dataplatform/datasource/${ids}`,
    method: 'delete'
  });
}

/**
 * 测试数据源连接（已保存）
 */
export function testDataSourceConnection(id: number) {
  return request<boolean>({
    url: `/dataplatform/datasource/test/${id}`,
    method: 'post'
  });
}

/**
 * 测试数据源连接（未保存）
 */
export function testConnection(data: DataSourceTestParams) {
  return request<boolean>({
    url: '/dataplatform/datasource/testConnection',
    method: 'post',
    data
  });
}

/**
 * 导出数据源列表
 */
export function exportDataSource(params: DataSourceQuery) {
  return request<Blob>({
    url: '/dataplatform/datasource/export',
    method: 'post',
    data: params,
    responseType: 'blob'
  });
}
